1. Technical Field
The present invention relates generally to the field of computers and computer systems. More particularly, the present invention relates to a computer system and to a method for resolving dependencies in a computer system.
2. Description of Related Art
Modern computing systems have become highly sophisticated and complex machines, which are relied upon to perform a huge range of tasks in all our everyday lives. These computer systems comprise a very large number of individual components and sub-systems that must all work together correctly. Thus, creating programs to execute on these systems is a difficult and challenging task. In particular, the application programs that run on these modern computing systems have become increasingly complex and are increasingly difficult to develop. This leads to very lengthy development and deployment cycles and/or leads to errors (e.g. crashes) when the computer systems execute the application programs under a live load and serving real users. It is therefore desired to improve the stability and reliability of such computer systems. Also, it is desired to reduce the workload which is involved in developing new applications to be used by such computer systems.
Modern computer systems usually depend upon a variety of libraries. One example is the popular Hibernate library, which is primarily used to map from Java classes to database tables (and from Java data types to SQL data types). In particular, Hibernate generates SQL calls to pass data into and out of database applications. Another example is the FreeMarker library. Yet another example is the JtaTransactionManager library, and there are many others.
These libraries may exist in multiple different versions. Often, the provider of the library will make changes and improvements to the library, and then release a newer version. Some application programs will then immediately make use of the new version. However, other application programs will not be compatible with the newer version and will instead still depend on an older version of the library. For example, one application will only function correctly with a current version of the Hibernate library, but another application will only function correctly with an earlier version of the Hibernate library and is not compatible with the current version. Thus, there is a difficulty in correctly satisfying the dependencies of an application by providing an appropriate version of the relevant library.
There is a complication in that several different applications may all share a single execution environment. For example, a plurality of applications will all execute on the same Java Virtual Machine (as opposed to each application having its own instance of the Java VM). This saves resources in the computer system but also creates further difficulties in correctly resolving the dependencies for all of these applications at the same time.
The exemplary embodiments have been provided with a view to addressing at least some of the difficulties that are encountered in current computer systems, whether those difficulties have been specifically mentioned above or will otherwise be appreciated by the person of ordinary skill in the art from the discussion herein. At least in some of the following exemplary embodiments it is now desired to provide an improved mechanism for resolving dependencies in a computer system.